package ModelLayer;
import java.util.ArrayList;

/**
 * Write a description of class Ordre here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Ordre
{
    private ArrayList<Delordre> delordrer;
    private String købsdato = null;
    private double totalpris;
    private String leveringsaddresse;
    private String status;
    private Kunde kunde = null;
    private static int NextID = 0;
    private int id;

    /**
     * Constructor for objects of class Ordre
     */
    public Ordre()
    {
        NextID++;
        id = NextID;
        delordrer = new ArrayList<Delordre>();
    }

    /**
     * Retunere en streng med information om alle delordrerne i ordren
     * 
     * @return String med alle delordres vare, antal og den id man skal bruge for henvende sig til dem
     */
    public String getDelordrer()
    {
        String string = "";
        int j = 1;
        for(int i = 0; i < delordrer.size(); i++)
        {
            string += j + ". " + delordrer.get(i).getVare().getNavn() + ": " + delordrer.get(i).getAntal() + "stk\n";
            j++;
        }
        return string;
    }

    /**
     * Retunere en string med mest relevante informationer om ordren
     */
    public String toString()
    {
        String string;
        string = "solgt: " + købsdato + "\nleveres til: " + leveringsaddresse + "\nstatus: " + status + "\nid: " + id + "\npris: " + totalpris + "\n" + getDelordrer();
        return string;
    }

    /**
     * Tilføjer en delordre til listen over delordre
     * 
     * @param Delordre der ønskes tilføjet
     */
    public void addDelordre(Delordre delordre)
    {
        delordrer.add(delordre);
    }

    public void sletDelordre(String navn)
    {
        if(findDelordre(navn) != null)
        {
            delordrer.remove(findDelordre(navn));
        }
    }

    /**
     * Ændre i delordre med den angivne id, hvis varen indeholder eksemplarer
     * 
     * @param i Id'en på delordren, kan findes ved getDelordrer()
     * @param vare Varen delordren ønskes at have
     */
    public void setDelordre(int i, Vare vare)
    {
        i = i -1;
        if(delordrer.get(i) != null)
        {
            if(vare != null)
            {
                delordrer.get(i).setVare(vare);
            }
            delordrer.get(i).setAntal();
        }
    }

    /**
     * Ændre i delordre med den angivne id, hvis varen ikke indeholder eksemplarer
     * 
     * @param i Id'en på delordren, kan findes ved getDelordrer()
     * @param vare Varen delordren ønskes at have
     * @param antal Antallet af varen
     */
    public void setDelordre(int i, Vare vare, int antal)
    {
        i = i -1;
        if(delordrer.get(i) != null)
        {
            if(antal != 0)
            {
                delordrer.get(i).setAntal(antal);
            }
            if(vare != null)
            {
                delordrer.get(i).setVare(vare);
            }
        }
    }

    public Delordre findDelordre(String navn)
    {
        Delordre d = null;
        boolean found = false;
        int i = 0;
        while(!found && i < delordrer.size())
        {
            if(delordrer.get(i).getVare().getNavn().equals(navn))
            {
                d = delordrer.get(i);
                found = true;
            }
            i++;
        }
        return d;
    }
    
    public String getKøbsdato()
    {
        return købsdato;
    }

    public void setKøbsdato(int dag, int måned, int år)
    {
        købsdato = "" + dag + "/" + måned + "-" + år;
    }
    
    public double getTotalpris()
    {
        return totalpris;
    }

    /**
     * Justere totalprisen efter varerne i ordren
     */
    public void setTotalpris()
    {
        double rabat = 0;
        double pris = 0;
        for(int i = 0; i < delordrer.size(); i++)
        {
            rabat = 100 - delordrer.get(i).getVare().getRabat() - kunde.getRabat();
            if(rabat < 80)
            {
                rabat = 80;
            }
            pris += delordrer.get(i).getPris() * (rabat / 100);
        }
        totalpris = pris;
    }

    public String getLeveringsaddresse()
    {
        return leveringsaddresse;
    }

    public void setLeveringsaddresse(String leveringsaddresse)
    {
        if(leveringsaddresse != null)
        {
            this.leveringsaddresse = leveringsaddresse;
        }
        else
        {
            this.leveringsaddresse = kunde.getAddress();
        }
    }

    public String getStatus()
    {
        return status;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }

    public Kunde getKunde()
    {
        return kunde;
    }

    public void setKunde(Kunde kunde)
    {
        this.kunde = kunde;
    }

    public int getID()
    {
        return id;
    }
}
